package com.tbit.main.service;

import com.tbit.main.pojo.Point;
import com.tbit.main.pojo.ProhibitArea;

import java.util.List;
import java.util.Map;

/**
 * 禁停区
 *
 * @author Leon
 * 2020年4月2日 下午3:54:14
 */
public interface ProhibitAreaService {
    /**
     * 添加
     *
     * @param prohibitArea
     */
    void insert(ProhibitArea prohibitArea);

    /**
     * 更新
     *
     * @param prohibitArea
     */
    void update(ProhibitArea prohibitArea);

    /**
     * 删除
     *
     * @param prohibitAreaId
     */
    void del(Integer prohibitAreaId);

    /**
     * 根据禁停区id查询
     *
     * @param prohibitAreaId
     * @return
     */
    ProhibitArea getByProhibitAreaId(Integer prohibitAreaId);


    /**
     * 根据运营区域id查询
     *
     * @param accountId
     * @return
     */
    List<ProhibitArea> getByAccountId(Integer accountId);

    /**
     * 根据分区id查询
     *
     * @param regionId
     * @return
     */
    List<ProhibitArea> getByRegionId(List<Integer> regionId);

    /**
     * 根据运营区域ids查询
     *
     * @param accountIds
     * @return
     */
    List<ProhibitArea> getByAccountIds(List<Integer> accountIds, String updateTime);

    /**
     * 根据运营区域ids查询
     *
     * @param accountIds
     * @return
     */
    List<ProhibitArea> getAccountIds(List<Integer> accountIds);

    /**
     * 批量更新
     *
     * @param map
     */
    void updateBatch(List<Map<String, Object>> map);

    /**
     * 根据代理商和半径查询
     *
     * @param accountId
     * @param lo
     * @param la
     * @param radius
     * @return
     */
    List<ProhibitArea> getByAccountAndArea(Integer accountId, Double lo, Double la, Integer radius);

    /**
     * 根据分区和半径查询
     *
     * @param regionId
     * @param lo
     * @param la
     * @param radius
     * @return
     */
    List<ProhibitArea> getByRegionAndArea(List<Integer> regionId, Double lo, Double la, Integer radius);

    /**
     * 判断是否在禁停区
     *
     * @param accountId
     * @param point
     * @param radius
     * @return
     */
    ProhibitArea checkInProhibitArea(Integer accountId, Point point, Integer radius);

    /**
     * 获取所有
     *
     * @return
     */
    List<ProhibitArea> getAll();

    /**
     * 清除已删除分区禁停区
     *
     * @return
     */
    List<Integer> getNotRegionId();

    /**
     * 更新过期分区禁停区
     *
     * @param prohibitAreaIds
     */
    void delRegionId(List<Integer> prohibitAreaIds);

    /**
     * 根据accountId和名称查询禁停区
     *
     * @param accountId        区域id
     * @param prohibitAreaName 禁停区名称
     */
    ProhibitArea getByProhibitAreaName(Integer accountId, String prohibitAreaName);
}